package main

import (
	"fmt"
	"sync"
)

var wg = new(sync.WaitGroup)

// 只写 单向通道
func producer(ch chan<- int) {
	defer wg.Done()

	for i := 0; i < 200; i++ {
		ch <- i
	}

	close(ch)
}

// 只读 单向通道
func consumer(ch <-chan int) {
	defer wg.Done()

	for i := range ch {
		fmt.Printf("%d\n", i)
	}
}

func main() {
	// 可读可写 双向通道
	ch := make(chan int, 10)

	wg.Add(1)
	go producer(ch)

	wg.Add(10)
	for i := 0; i < 10; i++ {
		go consumer(ch)
	}

	wg.Wait()
}
